/**
 * Copyright 2011 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.api.adwords.starterkit.wrappers;

import com.google.api.adwords.starterkit.db.keys.NetworkTargetKey;
import com.google.api.adwords.starterkit.db.structures.NetworkTargetStructure;
import com.google.api.adwords.starterkit.db.tables.NetworkTargetTable;
import com.google.api.adwords.starterkit.settings.CampaignSettings;

import java.sql.Connection;
import java.util.HashSet;

/**
 * The Class LanguageTargetWrapper manages all synchronization process related
 * to LanguageTarget Campaings.
 * 
 * @author rodrigo.f.vale@gmail.com
 */
public class NetworkTargetWrapper {
  private CampaignSettings campaignSettings;
  private CampaignWrapper campaignWrapper;
  private NetworkTargetTable networkTargetTable;

  /**
   * Instantiates a new geo target wrapper.
   * 
   * @param campaignWrapper the campaign wrapper
   * @param campaignSettings the starter kit settings
   * @param conn the connection to DB
   */
  public NetworkTargetWrapper(final CampaignWrapper campaignWrapper,
      final CampaignSettings campaignSettings, Connection conn) {
    this.campaignSettings = campaignSettings;
    this.campaignWrapper = campaignWrapper;
    networkTargetTable = new NetworkTargetTable(conn);
    sync();
  }

  /**
   * Synchronize the current geoTarget with the geoTarget in StarterKit DB.
   */
  public void sync() {
    HashSet<NetworkTargetStructure> networkTargets =
        campaignSettings.getNetworkTargetList();
    NetworkTargetTable.link(campaignWrapper, networkTargets);

    NetworkTargetKey networkTargetKey 
        = new NetworkTargetKey(campaignWrapper.getLocalId());
    HashSet<NetworkTargetStructure> geoAdWordsTargets =
        networkTargetTable.get(networkTargetKey);

    if (!NetworkTargetTable.equals(networkTargets, geoAdWordsTargets)) {
      networkTargetTable.del(networkTargetKey);
      networkTargetTable.save(networkTargets);
      campaignWrapper.setModifiedNetwork(true);
    }
  }
}